package hotel;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

import com.apple.eawt.Application;
import com.apple.eawt.FullScreenUtilities;
import com.itextpdf.text.DocumentException;

public class GraficaHotel extends JFrame implements ActionListener, KeyListener {
	private static final long serialVersionUID = 1L;
	private static ImageIcon iconav = new ImageIcon("Risorse/iconav.png");
	private static ImageIcon iconax = new ImageIcon("Risorse/iconax.png");
	private ImageIcon iconai = new ImageIcon("Risorse/iconai.png"),
			iconae = new ImageIcon("Risorse/iconae.png");
	Icon aggCamera = new ImageIcon("Risorse/addRImg.png"),
			rimCamera = new ImageIcon("Risorse/removeRImg.png"),
			aggCliente = new ImageIcon("Risorse/addPImg.png"),
			rimCliente = new ImageIcon("Risorse/removePImg.png"),
			modCamera = new ImageIcon("Risorse/setRImg.png"),
			modCliente = new ImageIcon("Risorse/setPImg.png"),
			cartella = new ImageIcon("Risorse/cartella.png"),
			checkInImg = new ImageIcon("Risorse/checkInImg.png"),
			checkOutImg = new ImageIcon("Risorse/checkOutImg.png"),
			ricAvI = new ImageIcon("Risorse/ricerca.png"),
			statImg = new ImageIcon("Risorse/statistiche.png"),
			dispoImg = new ImageIcon("Risorse/pollice.png"),
			eventiImg = new ImageIcon("Risorse/prenotImg.png"),
			croce = new ImageIcon("Risorse/croce.png"), pdf = new ImageIcon(
					"Risorse/pdf.png");

	public static Database database;
	private GridBagConstraints c = new GridBagConstraints();
	private JComboBox<String> boxCliente;
	static JComboBox<String> boxCamera;
	private MyResultSet rs = null;
	@SuppressWarnings("unused")
	public static ArrayList<JButton> b;
	public static MyDefaultTableModel modelClienti;
	public static MyDefaultTableModel modelCamere;
	public JScrollPane scroll1;
	public JScrollPane scroll2;
	public String nomeHotel;
	@SuppressWarnings("unused")
	private int numCamere;
	private String password;
	public static JTable tabellaClienti;
	public static JTable tabellaCamere;
	public JPanel mainPanel, pannelloCamere, pannelloBottoni, pannelloRicerca,
			pannelloContenitore, pannelloTabella1, pannelloTabella2,
			mainPanelT;
	static JTextField cerca;
	private JMenu comandi, visualizza;
	private JFileChooser scegli;
	private JMenuBar barra;
	private JMenuItem addR, removeR, viewC, viewN, addP, removeP, statistiche,
			iniz, ricercaAvanzata, sommarioEventi, esporta;
	private Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	public int larghezza = d.width;
	public int altezza = d.height;
	private JButton addR1, removeR1, addP1, removeP1, setR, setP, addClienti;
	public JRadioButton cercaCliente, cercaCamera, nonSpecificato, disponibile,
			occupata, presenti;
	JRadioButton tutti;
	private JButton ricAv, verificaDisponibilita;
	private JMenuItem verifDisp;
	private JPasswordField textP;
	public String username;

	public GraficaHotel(Database d, String username) throws SQLException,
			IOException, ClassNotFoundException {
		String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
		this.username = username;
		database = d;
		nomeHotel = accessoNome(username);
		password = accessoPassword(username);
		try {
			UIManager.setLookAndFeel(lookAndFeel);
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		setTitle("Gestore " + nomeHotel);
		Image immagineIc = Toolkit.getDefaultToolkit().getImage(
				"Risorse/HOTEL.png");
		//MAC
		System.setProperty("apple.laf.useScreenMenuBar", "true");
		com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(this,true);
		//MAC
		
		this.setIconImage(immagineIc);
		if (Toolkit.getDefaultToolkit().isFrameStateSupported(
				JFrame.MAXIMIZED_BOTH))
			setExtendedState(JFrame.MAXIMIZED_BOTH);
		else
			setSize(larghezza, altezza);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				database.chiudiSocket();
				System.exit(0);
			}
		});
		CardLayout l = new CardLayout();

		creaTabellaClienti("select nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') from "
				+ username + ".clienti where presente=1");
		creaTabellaCamere("SELECT numero,numeroposti,matrimoniale,stato FROM "
				+ username + ".CAMERE");

		// pannello principale
		mainPanel = new JPanel();
		mainPanel.setLayout(l);
		add(mainPanel);

		// pannello contenitore
		pannelloContenitore = new JPanel();
		pannelloContenitore.setLayout(new BorderLayout());
		mainPanel.add(pannelloContenitore);

		// pannello principale tabelle
		mainPanelT = new JPanel();
		mainPanelT.setLayout(l);
		pannelloContenitore.add(mainPanelT, BorderLayout.CENTER);

		// pannello 1 (pannello camere)
		pannelloCamere = new JPanel();
		mainPanel.add(pannelloCamere);
		pannelloCamere.setBackground(Color.BLACK);
		pannelloCamere.setPreferredSize(new Dimension(larghezza, altezza));
		b = new ArrayList<JButton>();
		pannelloCamere.setLayout(new GridBagLayout());
		visualizzaCamere("SELECT numero,stato FROM " + username + ".CAMERE");

		// pannello 5 (tabella clienti)
		scroll1 = new JScrollPane(tabellaClienti);
		JTableHeader header1 = tabellaClienti.getTableHeader();
		header1.setReorderingAllowed(false);
		pannelloTabella1.add(header1, BorderLayout.PAGE_START);
		pannelloTabella1.add(scroll1, BorderLayout.CENTER);
		mainPanelT.add(pannelloTabella1);
		pannelloTabella1.setPreferredSize(new Dimension(larghezza / 6,
				altezza / 6));
		tabellaClienti.setAutoCreateRowSorter(false);
		tabellaClienti.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					JTable target = (JTable) e.getSource();
					int row = target.getSelectedRow();
					try {
						new FinestraCliente((String) target.getValueAt(row, 3),
								GraficaHotel.this).setVisible(true);
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}
		});
		tabellaClienti.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.getKeyChar() == e.VK_ENTER) {
					JTable target = (JTable) e.getSource();
					int row = target.getSelectedRow();
					try {
						new FinestraCliente((String) target.getValueAt(row, 3),
								GraficaHotel.this).setVisible(true);
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}
		});

		// pannello 6 (tabella camere)
		scroll2 = new JScrollPane(tabellaCamere);
		JTableHeader header2 = tabellaCamere.getTableHeader();
		header2.setReorderingAllowed(false);
		pannelloTabella2.add(header2, BorderLayout.PAGE_START);
		pannelloTabella2.add(scroll2, BorderLayout.CENTER);
		mainPanelT.add(pannelloTabella2);
		pannelloTabella2.setPreferredSize(new Dimension(larghezza / 6,
				altezza / 6));
		tabellaCamere.setAutoCreateRowSorter(false);
		tabellaCamere.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabellaCamere.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					JTable target = (JTable) e.getSource();
					int row = target.getSelectedRow();
					new FinestraCamera(GraficaHotel.this, (String) target
							.getValueAt(row, 0)).setVisible(true);

				}
			}
		});

		// pannello 2 (bottoni)
		pannelloBottoni = new JPanel();
		pannelloContenitore.add(pannelloBottoni, BorderLayout.EAST);
		pannelloBottoni.setLayout(new GridLayout(20, 1, 0, 3));
		pannelloBottoni.setPreferredSize(new Dimension(larghezza / 6, altezza));

		ButtonGroup bg2 = new ButtonGroup();
		ButtonGroup bg3 = new ButtonGroup();
		ButtonGroup bg4 = new ButtonGroup();

		// pannello 3 (campo di ricerca)
		pannelloRicerca = new JPanel();
		boxCliente = new JComboBox<String>();
		boxCliente.addItem("Nome");
		boxCliente.addItem("Cognome");
		boxCliente.addItem("Numero di Documento");
		boxCliente.addActionListener(this);
		boxCamera = new JComboBox<String>();
		boxCamera.addItem("Numero");
		boxCamera.addItem("Numero Posti");
		boxCamera.addActionListener(this);
		boxCamera.setVisible(false);

		nonSpecificato = new JRadioButton("Tutte", true);
		nonSpecificato.addActionListener(this);
		nonSpecificato.setVisible(false);
		disponibile = new JRadioButton("Disponibile");
		disponibile.addActionListener(this);
		disponibile.setVisible(false);
		occupata = new JRadioButton("Occupata");
		occupata.addActionListener(this);
		occupata.setVisible(false);
		cercaCliente = new JRadioButton("Cerca cliente", true);
		cercaCliente.addActionListener(new MyActionListener(l, mainPanelT));
		cercaCamera = new JRadioButton("Cerca camera");
		cercaCamera.addActionListener(new MyActionListener(l, mainPanelT));
		tutti = new JRadioButton("Tutti");
		tutti.addActionListener(this);
		presenti = new JRadioButton("Presenti", true);
		presenti.addActionListener(this);

		bg2.add(cercaCliente);
		bg2.add(cercaCamera);
		bg3.add(nonSpecificato);
		bg3.add(disponibile);
		bg3.add(occupata);
		bg4.add(presenti);
		bg4.add(tutti);

		pannelloRicerca.add(cercaCliente);
		pannelloRicerca.add(cercaCamera);
		pannelloRicerca.setLayout(new FlowLayout(FlowLayout.LEADING));
		pannelloContenitore.add(pannelloRicerca, BorderLayout.NORTH);

		cerca = new JTextField(20);
		cerca.addKeyListener(this);
		pannelloRicerca.add(cerca);
		pannelloRicerca.add(boxCliente);
		pannelloRicerca.add(boxCamera);
		pannelloRicerca.add(nonSpecificato);
		pannelloRicerca.add(disponibile);
		pannelloRicerca.add(occupata);
		pannelloRicerca.add(presenti);
		pannelloRicerca.add(tutti);

		pannelloRicerca
				.setPreferredSize(new Dimension(larghezza, altezza / 25));

		// barra menu
		barra = new JMenuBar();
		setJMenuBar(barra);
		// menu: comandi
		comandi = new JMenu("Comandi");
		barra.add(comandi);
		// azioni: aggiungi camera
		addR = new JMenuItem("Aggiungi Camera");
		comandi.add(addR);
		addR.setIcon(aggCamera);
		addR.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,
				ActionEvent.ALT_MASK));
		addR.addActionListener(this);
		// azioni: rimuovi camera
		removeR = new JMenuItem("Rimuovi Camera");
		comandi.add(removeR);
		removeR.setIcon(rimCamera);
		removeR.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,
				ActionEvent.ALT_MASK));
		removeR.addActionListener(this);
		comandi.addSeparator();
		// azioni: aggiungi cliente
		addP = new JMenuItem("Aggiungi Cliente");
		comandi.add(addP);
		addP.setIcon(aggCliente);
		addP.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3,
				ActionEvent.ALT_MASK));
		addP.addActionListener(this);
		// azioni: rimuovi cliente
		removeP = new JMenuItem("Rimuovi Cliente");
		comandi.add(removeP);
		removeP.setIcon(rimCliente);
		removeP.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_4,
				ActionEvent.ALT_MASK));
		removeP.addActionListener(this);
		// statistiche
		comandi.addSeparator();
		statistiche = new JMenuItem("Mostra Statistiche Clienti");
		statistiche.setIcon(statImg);
		statistiche.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				ActionEvent.ALT_MASK));
		statistiche.addActionListener(this);
		comandi.add(statistiche);
		comandi.addSeparator();

		verifDisp = new JMenuItem("Verifica Disponibilita'");
		verifDisp.setIcon(dispoImg);
		verifDisp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
				ActionEvent.ALT_MASK));
		verifDisp.addActionListener(this);
		comandi.add(verifDisp);

		// azioni: ricerca avanzata
		ricercaAvanzata = new JMenuItem("Ricerca Avanzata");
		ricercaAvanzata.setIcon(ricAvI);
		ricercaAvanzata.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
				ActionEvent.ALT_MASK));
		ricercaAvanzata.addActionListener(this);
		comandi.add(ricercaAvanzata);

		// azioni: sommario eventi
		sommarioEventi = new JMenuItem("Sommario Eventi");
		sommarioEventi.setIcon(eventiImg);
		sommarioEventi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
				ActionEvent.ALT_MASK));
		sommarioEventi.addActionListener(this);
		comandi.add(sommarioEventi);

		// azioni: elimina tutto
		comandi.addSeparator();
		esporta = new JMenuItem("Esporta PDF Clienti");
		esporta.setIcon(pdf);
		esporta.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
				ActionEvent.ALT_MASK));
		esporta.addActionListener(this);
		comandi.add(esporta);

		iniz = new JMenuItem("Inizializza Software");
		iniz.setIcon(croce);
		iniz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,
				ActionEvent.ALT_MASK));
		iniz.addActionListener(this);
		comandi.add(iniz);

		// menu: visualizza
		visualizza = new JMenu("Visualizza");
		barra.add(visualizza);
		ButtonGroup bg1 = new ButtonGroup();
		// visualizza: visualizzazione normale
		viewN = new JRadioButtonMenuItem("Visualizzazione Normale", true);
		visualizza.add(viewN);
		bg1.add(viewN);
		viewN.addActionListener(new MyActionListener(l, mainPanel));
		// visualizza: visualizzazione camere
		viewC = new JRadioButtonMenuItem("Visualizzazione Camere");
		visualizza.add(viewC);
		bg1.add(viewC);
		viewC.addActionListener(new MyActionListener(l, mainPanel));

		verificaDisponibilita = new JButton("Verifica Disponibilita");
		verificaDisponibilita.setIcon(dispoImg);
		verificaDisponibilita.setHorizontalAlignment(SwingConstants.LEFT);
		verificaDisponibilita.setIconTextGap(40);
		verificaDisponibilita.addActionListener(this);
		pannelloBottoni.add(verificaDisponibilita);

		ricAv = new JButton("Ricerca Avanzata");
		ricAv.setIcon(ricAvI);
		ricAv.setHorizontalAlignment(SwingConstants.LEFT);
		ricAv.setIconTextGap(40);
		ricAv.addActionListener(this);
		pannelloBottoni.add(ricAv);
		// Aggiungi camera
		addR1 = new JButton("Aggiungi Camera");
		addR1.setIcon(aggCamera);
		addR1.setHorizontalAlignment(SwingConstants.LEFT);
		addR1.setIconTextGap(40);
		addR1.addActionListener(this);
		pannelloBottoni.add(addR1);
		// Rimuovi camera
		removeR1 = new JButton("Rimuovi Camera");
		removeR1.setIcon(rimCamera);
		removeR1.setHorizontalAlignment(SwingConstants.LEFT);
		removeR1.setIconTextGap(40);
		pannelloBottoni.add(removeR1);
		removeR1.addActionListener(this);
		// Aggiungi cliente
		addP1 = new JButton("Aggiungi Cliente");
		addP1.setIcon(aggCliente);
		addP1.setHorizontalAlignment(SwingConstants.LEFT);
		addP1.setIconTextGap(40);
		pannelloBottoni.add(addP1);
		addP1.addActionListener(this);
		// Rimuovi cliente
		removeP1 = new JButton("Rimuovi Cliente");
		removeP1.setIcon(rimCliente);
		removeP1.setHorizontalAlignment(SwingConstants.LEFT);
		removeP1.setIconTextGap(40);
		pannelloBottoni.add(removeP1);
		removeP1.addActionListener(this);
		// Modifica camera
		setR = new JButton("Modifica Camera");
		setR.setIcon(modCamera);
		setR.setHorizontalAlignment(SwingConstants.LEFT);
		setR.setIconTextGap(40);
		pannelloBottoni.add(setR);
		setR.addActionListener(this);
		// Modifica cliente
		setP = new JButton("Modifica Cliente");
		setP.setIcon(modCliente);
		setP.setHorizontalAlignment(SwingConstants.LEFT);
		setP.setIconTextGap(40);
		pannelloBottoni.add(setP);
		setP.addActionListener(this);
		// Aggiungi clienti da File
		addClienti = new JButton("Aggiungi Clienti da File");
		addClienti.setIcon(cartella);
		addClienti.setHorizontalAlignment(SwingConstants.LEFT);
		addClienti.setIconTextGap(40);
		pannelloBottoni.add(addClienti);
		addClienti.addActionListener(this);

		setColor();

	}

	public GraficaHotel getInstance() {
		return this;
	}

	public String getNomeHotel() {
		return nomeHotel;
	}// getNomeHotel

	public void actionPerformed(ActionEvent e) {
		if (viewC.isSelected() && e.getSource() instanceof JButton) {
			new FinestraCamera(this, e.getActionCommand());
		} else if (e.getSource() == addR) {
			new AggiungiCamera(this);
		}// addR
		else if (e.getSource() == verifDisp
				|| e.getSource() == verificaDisponibilita) {
			new VerificaDisponibilita(this);
		} else if (e.getSource() == removeR) {
			int[] rows1 = tabellaCamere.getSelectedRows();
			if (rows1.length < 1) {
				JOptionPane.showMessageDialog(null,
						"Nessuna camera selezionata!", "Attenzione",
						JOptionPane.WARNING_MESSAGE, iconae);
				this.setVisible(true);
			} else if (JOptionPane.YES_OPTION == JOptionPane
					.showConfirmDialog(
							null,
							"Sicuro di voler continuare? Verranno eliminati anche i dati relativi alle storico e alle prenotazioni",
							"Avviso", JOptionPane.YES_NO_OPTION,
							JOptionPane.WARNING_MESSAGE, iconai)) {
				mergeSort(rows1, 0, rows1.length - 1);
				for (int i = 0; i < rows1.length; i++) {
					if (database.rimuoviCamera(
							(String) modelCamere.getValueAt(rows1[i], 0),
							username)) {
						modelCamere.removeRow(rows1[i]);
					}
				}
				this.setVisible(true);
			}
		}// removeR
		else if (e.getSource() == addP || e.getSource() == addP1) {
			try {
				new AggiungiCliente(this, "0", true);
			} catch (SQLException | IOException e1) {
				e1.printStackTrace();
			}

		}// addP e addP1

		else if (e.getSource() == removeP || e.getSource() == removeP1) {
			int[] rows = tabellaClienti.getSelectedRows();
			if (rows.length < 1) {
				JOptionPane.showMessageDialog(null,
						"Nessun cliente selezionato!", "Attenzione",
						JOptionPane.WARNING_MESSAGE, iconae);
				this.setVisible(true);
			} else if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(
					null, "Sicuro di voler continuare?", "Avviso",
					JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
					iconai)) {
				mergeSort(rows, 0, rows.length - 1);
				for (int i = 0; i < rows.length; i++) {
					if (database.rimuoviCliente(
							(String) modelClienti.getValueAt(rows[i], 3),
							username)) {
						modelClienti.removeRow(rows[i]);
					}
				}
				this.setVisible(true);
			}

		}// removeP e removeP1
		else if (e.getSource() == b) {

		}// b
		else if (e.getSource() == ricercaAvanzata || e.getSource() == ricAv) {
			new RicercaAvanzata(this);
		}// ricercaAvanzata
		else if (e.getSource() == sommarioEventi) {
			new FinestraEventi(this);
		}// sommarioEventi
		else if (e.getSource() == iniz) {
			if (JOptionPane
					.showConfirmDialog(
							null,
							"Quest'azione sara' irreversibile ed inizializzera' il software e gli eventuali database presenti! \n "
									+ "                                                 CONTINUARE?",
							"Inizializza", JOptionPane.YES_NO_CANCEL_OPTION,
							JOptionPane.QUESTION_MESSAGE, iconai) == JOptionPane.YES_OPTION) {
				//
				JPanel panel = new JPanel();
				JLabel label = new JLabel("Inserisci la password:");
				JPasswordField pass = new JPasswordField(10);
				panel.add(label);
				panel.add(pass);
				String[] options = new String[]{"Ok", "Annulla"};
				int option = JOptionPane.showOptionDialog(null, panel, "ATTENZIONE",
				                         JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE,
				                         null, options, options[1]);
				if(option != 0)
				{
				    return;
				}
				char[] password = pass.getPassword();
			    String p = new String(password);
				if (!p.equals(this.password)) {
					JOptionPane.showMessageDialog(null, "Password Errata!",
							"Attenzione", JOptionPane.WARNING_MESSAGE, iconae);
					this.setVisible(true);
					return;
				}
				database.queryInserimento("drop table " + username
						+ ".ASSOCIAZIONE");
				database.queryInserimento("drop table " + username
						+ ".PRENOTAZIONI");
				database.queryInserimento("drop table " + username + ".STORICO");
				database.queryInserimento("drop table " + username + ".CAMERE");
				database.queryInserimento("drop table " + username + ".CLIENTI");
				database.queryInserimento("drop schema "+username);
				database.queryInserimento("UPDATE accesso.dati SET installato='0' WHERE username='"+username+"';");
				JOptionPane.showMessageDialog(null,
						"Software Inizializzato correttamente! \n"
								+ "    L'applicazione verra' chiusa.",
						"Ottimo", JOptionPane.INFORMATION_MESSAGE, iconav);
				System.exit(0);
			} else
				this.setVisible(true);
		}// iniz
		else if (e.getSource() == addClienti) {
			scegli = new JFileChooser();
			scegli.setAcceptAllFileFilterUsed(false);
			FileNameExtensionFilter fn = new FileNameExtensionFilter(
					"File .txt", "txt");
			scegli.addChoosableFileFilter(fn);
			if (scegli.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
				if (popolaTabellaDaFile(scegli.getSelectedFile()
						.getAbsolutePath())) {
					try {
						azzeraTabellaClienti();
						if (presenti.isSelected())
							ricercaInTabellaClienti("SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
									+ username + ".CLIENTI where presente=1");
						else
							ricercaInTabellaClienti("SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
									+ username + ".CLIENTI");
					} catch (SQLException e1) {
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						e1.printStackTrace();
					}
				}
			}
			this.setVisible(true);
		}// addClienti
		else if (e.getSource() == statistiche) {
			new FinestraStatistiche(this);
		}// statistiche
		else if (e.getSource() == addR1) {
			new AggiungiCamera(this);
		}// addR1
		else if (e.getSource() == nonSpecificato) {
			String selezionato = "";
			if (boxCamera.getSelectedItem().equals("Numero"))
				selezionato = "numero";
			else if (boxCamera.getSelectedItem().equals("Numero Posti"))
				selezionato = "numeroposti";
			String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
					+ username + ".camere  WHERE " + selezionato + " like '"
					+ cerca.getText() + "%'";
			try {
				azzeraTabellaCamere();
				ricercaInTabellaCamere(query);
			} catch (SQLException e1) {
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}

		}// nonSpecificato
		else if (e.getSource() == disponibile) {
			String selezionato = "";
			if (boxCamera.getSelectedItem().equals("Numero"))
				selezionato = "numero";
			else if (boxCamera.getSelectedItem().equals("Numero Posti"))
				selezionato = "numeroposti";
			String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
					+ username + ".camere  WHERE " + selezionato + " like '"
					+ cerca.getText() + "%' && stato='DISPONIBILE'";
			try {
				azzeraTabellaCamere();
				ricercaInTabellaCamere(query);
			} catch (SQLException e1) {
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}

		}// disponibile
		else if (e.getSource() == occupata) {
			String selezionato = "";
			if (boxCamera.getSelectedItem().equals("Numero"))
				selezionato = "numero";
			else if (boxCamera.getSelectedItem().equals("Numero Posti"))
				selezionato = "numeroposti";
			String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
					+ username + ".camere  WHERE " + selezionato + " like '"
					+ cerca.getText() + "%' && stato='OCCUPATA'";
			try {
				azzeraTabellaCamere();
				ricercaInTabellaCamere(query);
			} catch (SQLException e1) {
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}

		}// occupata
		else if (e.getSource() == tutti) {
			if (cercaCliente.isSelected()) {
				String selezionato = "";
				if (boxCliente.getSelectedItem().equals("Nome"))
					selezionato = "nome";
				else if (boxCliente.getSelectedItem().equals("Cognome"))
					selezionato = "cognome";
				else if (boxCliente.getSelectedItem().equals(
						"Numero di Documento"))
					selezionato = "numerodidocumento";
				try {
					String query = "SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
							+ username
							+ ".CLIENTI WHERE "
							+ selezionato
							+ " like '" + cerca.getText() + "%'";

					azzeraTabellaClienti();
					ricercaInTabellaClienti(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
			}
		} else if (e.getSource() == presenti) {
			String selezionato = "";
			if (boxCliente.getSelectedItem().equals("Nome"))
				selezionato = "nome";
			else if (boxCliente.getSelectedItem().equals("Cognome"))
				selezionato = "cognome";
			else if (boxCliente.getSelectedItem().equals("Numero di Documento"))
				selezionato = "numerodidocumento";
			try {
				String query = "select nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') from "
						+ username
						+ ".clienti where "
						+ selezionato
						+ " like '" + cerca.getText() + "%' && presente=1";
				azzeraTabellaClienti();
				ricercaInTabellaClienti(query);
			} catch (SQLException e1) {
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}
		} else if (e.getSource() == boxCliente) {
			String selezionato = "";
			if (boxCliente.getSelectedItem().equals("Nome"))
				selezionato = "nome";
			else if (boxCliente.getSelectedItem().equals("Cognome"))
				selezionato = "cognome";
			else if (boxCliente.getSelectedItem().equals("Numero di Documento"))
				selezionato = "numerodidocumento";
			if (presenti.isSelected())
				try {
					String query = "SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
							+ username
							+ ".CLIENTI where "
							+ selezionato
							+ " like '" + cerca.getText() + "%' && presente=1";
					azzeraTabellaClienti();
					ricercaInTabellaClienti(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
			else
				try {
					String query = "SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
							+ username
							+ ".CLIENTI where "
							+ selezionato
							+ " like '" + cerca.getText() + "%'";
					azzeraTabellaClienti();
					ricercaInTabellaClienti(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}

		} // boxCliente
		else if (e.getSource() == boxCamera) {
			String selezionato = "";
			if (boxCamera.getSelectedItem().equals("Numero"))
				selezionato = "numero";
			else if (boxCamera.getSelectedItem().equals("Numero Posti"))
				selezionato = "numeroposti";
			if (nonSpecificato.isSelected())
				try {
					String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere WHERE "
							+ selezionato
							+ " like '" + cerca.getText() + "%'";
					azzeraTabellaCamere();
					ricercaInTabellaCamere(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
			else if (disponibile.isSelected())
				try {
					String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere WHERE "
							+ selezionato
							+ " like '"
							+ cerca.getText()
							+ "%' && stato='DISPONIBILE'";
					azzeraTabellaCamere();
					ricercaInTabellaCamere(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
			else
				try {
					String query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere WHERE "
							+ selezionato
							+ " like '"
							+ cerca.getText()
							+ "%' && stato='OCCUPATA'";
					azzeraTabellaCamere();
					ricercaInTabellaCamere(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
		}// boxCamera
		else if (e.getSource() == removeR1) {
			int[] rows1 = tabellaCamere.getSelectedRows();
			if (rows1.length < 1) {
				JOptionPane.showMessageDialog(null,
						"Nessuna camera selezionata!", "Attenzione",
						JOptionPane.WARNING_MESSAGE, iconae);
				this.setVisible(true);
			} else if (JOptionPane.YES_OPTION == JOptionPane
					.showConfirmDialog(
							null,
							"Sicuro di voler continuare? Verranno eliminati anche i dati relativi alle storico e alle prenotazioni",
							"Avviso", JOptionPane.YES_NO_OPTION,
							JOptionPane.WARNING_MESSAGE, iconai)) {
				mergeSort(rows1, 0, rows1.length - 1);
				for (int i = 0; i < rows1.length; i++) {
					if (database.rimuoviCamera(
							(String) modelCamere.getValueAt(rows1[i], 0),
							username)) {
						modelCamere.removeRow(rows1[i]);
					}
				}
				this.setVisible(true);
			}
		}// removeR1
		else if (e.getSource() == setP) {
			int row = tabellaClienti.getSelectedRow();
			if (row == -1) {
				JOptionPane.showMessageDialog(null,
						"Nessun cliente selezionato!", "Attenzione",
						JOptionPane.WARNING_MESSAGE, iconae);
				this.setVisible(true);
			} else {
				try {
					new AggiungiCliente(this,
							(String) tabellaClienti.getValueAt(row, 3), false);
				} catch (SQLException | IOException e1) {
					e1.printStackTrace();
				}
			}
		} else if (e.getSource() == setR) {
			int row = tabellaCamere.getSelectedRow();
			if (row == -1) {
				JOptionPane.showMessageDialog(null,
						"Nessuna camera selezionata!", "Attenzione",
						JOptionPane.WARNING_MESSAGE, iconae);
				this.setVisible(true);
			} else {
				if (controlla((String) tabellaCamere.getValueAt(row, 0))) {
					JOptionPane.showMessageDialog(null,
							"La stanza e' occupata da un cliente!"
									+ " \n   Impossibile modificare!",
							"ERRORE", JOptionPane.ERROR_MESSAGE, iconax);
					this.setVisible(true);
				} else {
					new ModificaCamera(
							(String) tabellaCamere.getValueAt(row, 0), this);
				}
			}
		} else if (e.getSource() == esporta) {
			try {
				new CreaPDF(this);
			} catch (FileNotFoundException | DocumentException e1) {
				e1.printStackTrace();
			}
		}
	}

	private boolean controlla(String chiave) {
		rs = database.querySelect("SELECT * FROM " + username
				+ ".ASSOCIAZIONE where camera='" + chiave + "'");
		if (rs.next())
			return true;
		return false;
	}

	public Database getDB() {
		return database;
	}

	@SuppressWarnings("resource")
	public boolean popolaTabellaDaFile(String path) {
		try {
			Scanner out = new Scanner(new File(path));
			int i = 0;
			while (out.hasNextLine()) {
				String stt = out.nextLine();
				Scanner in = new Scanner(stt);
				in.useDelimiter("@");
				boolean flag = true;
				i++;
				while (flag) {
					String nome = in.next();
					if (nome.equals("end")) {
						JOptionPane.showMessageDialog(null,
								"File letto correttamente!", "Ottimo",
								JOptionPane.INFORMATION_MESSAGE, iconav);
						return true;
					}
					String cognome = in.next();
					String dataDiNascita = in.next();
					String comuneDiNascita = in.next();
					String provinciaN = in.next();
					String residenza = in.next();
					String provinciaR = in.next();
					String documento = in.next();
					String numDoc = in.next();
					String rilasDa = in.next();
					String rilasIl = in.next();
					String oggi = in.next();
					String indirizzo = in.next();
					String email = "andoma@live.it";
					String query = "INSERT INTO "
							+ username
							+ ".CLIENTI"
							+ "(nome,cognome,datadinascita,comunedinascita,"
							+ "provinciadinascita,residenza,provinciadiresidenza,tipodidocumento,numerodidocumento,"
							+ "rilasciatoda,datadirilascio,datadiarrivo,indirizzo,email) values('"
							+ nome + "','" + cognome + "','" + dataDiNascita
							+ "','" + comuneDiNascita + "','" + provinciaN
							+ "','" + residenza + "','" + provinciaR + "','"
							+ documento + "','" + numDoc + "','" + rilasDa
							+ "','" + rilasIl + "','" + oggi + "','"
							+ indirizzo + "','" + email + "')";
					int codiceSuccesso = aggiungi(query);
					if (codiceSuccesso == 1292) {
						JOptionPane.showMessageDialog(null,
								"Date non corrette!", "ERRORE",
								JOptionPane.ERROR_MESSAGE, iconax);
					} else if (codiceSuccesso == 1062) {
						JOptionPane.showMessageDialog(null, "Cliente " + i
								+ " gia' registrato!", "ERRORE",
								JOptionPane.ERROR_MESSAGE, iconax);
					}
					flag = false;
				}
			}
			return true;
		} catch (Exception e) {
			JOptionPane
					.showMessageDialog(
							null,
							"Il File scelto non e' corretto! \n             Per maggiori informazioni leggera la guida.");
			return false;
		}
	}

	private void setColor() {
		barra.setBackground(Color.GRAY);
		pannelloBottoni.setBackground(Color.LIGHT_GRAY);
		pannelloRicerca.setBackground(Color.LIGHT_GRAY);
		comandi.setBackground(Color.GRAY);
		visualizza.setBackground(Color.GRAY);
		tabellaClienti.setGridColor(Color.LIGHT_GRAY);
		tabellaCamere.setGridColor(Color.LIGHT_GRAY);
		cercaCliente.setBackground(Color.LIGHT_GRAY);
		cercaCamera.setBackground(Color.LIGHT_GRAY);
		nonSpecificato.setBackground(Color.LIGHT_GRAY);
		disponibile.setBackground(Color.LIGHT_GRAY);
		occupata.setBackground(Color.LIGHT_GRAY);
		addR1.setBackground(Color.LIGHT_GRAY);
		removeR1.setBackground(Color.LIGHT_GRAY);
		addP1.setBackground(Color.LIGHT_GRAY);
		removeP1.setBackground(Color.LIGHT_GRAY);
		setR.setBackground(Color.LIGHT_GRAY);
		setP.setBackground(Color.LIGHT_GRAY);
		addClienti.setBackground(Color.LIGHT_GRAY);
		ricAv.setBackground(Color.LIGHT_GRAY);
		tutti.setBackground(Color.LIGHT_GRAY);
		presenti.setBackground(Color.LIGHT_GRAY);
		verificaDisponibilita.setBackground(Color.LIGHT_GRAY);

	}

	private static int aggiungi(String line) {
		return database.queryInserimento(line);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// Auto-generated method stub

	}

	@Override
	public void keyPressed(KeyEvent e) {

	}

	@Override
	public void keyReleased(KeyEvent e) {
		if (e.getSource() == cerca) {
			if (e.getKeyChar()=='\'') {
				JOptionPane.showMessageDialog(null,
						"Impossibile inserire il carattere '");
				cerca.setText("");
			} else {
				String query;
				if (cercaCliente.isSelected()) {
					String selezionato = "";
					if (boxCliente.getSelectedItem().equals("Nome"))
						selezionato = "nome";
					else if (boxCliente.getSelectedItem().equals("Cognome"))
						selezionato = "cognome";
					else if (boxCliente.getSelectedItem().equals(
							"Numero di Documento"))
						selezionato = "numerodidocumento";
					try {
						if (tutti.isSelected()) {
							query = "SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
									+ username
									+ ".CLIENTI WHERE "
									+ selezionato
									+ " like '"
									+ cerca.getText()
									+ "%'";
							azzeraTabellaClienti();
							ricercaInTabellaClienti(query);
						} else if (presenti.isSelected()) {
							query = "select nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') from "
									+ username
									+ ".clienti where "
									+ selezionato
									+ " like '"
									+ cerca.getText()
									+ "%' && presente=1";
							azzeraTabellaClienti();
							ricercaInTabellaClienti(query);
						}
					} catch (SQLException e1) {
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						e1.printStackTrace();
					}
				}// fine if
				else if (cercaCamera.isSelected()) {
					String selezionato = "";
					if (boxCamera.getSelectedItem().equals("Numero"))
						selezionato = "numero";
					else if (boxCamera.getSelectedItem().equals("Numero Posti"))
						selezionato = "numeroposti";
					if (nonSpecificato.isSelected()) {
						query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
								+ username
								+ ".camere  WHERE "
								+ selezionato
								+ " like '" + cerca.getText() + "%'";
					} else if (disponibile.isSelected()) {
						query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
								+ username
								+ ".camere  WHERE "
								+ selezionato
								+ " like '"
								+ cerca.getText()
								+ "%' && stato='DISPONIBILE'";
					} else {
						query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
								+ username
								+ ".camere  WHERE "
								+ selezionato
								+ " like '"
								+ cerca.getText()
								+ "%' && stato='OCCUPATA'";
					}
					try {
						azzeraTabellaCamere();
						ricercaInTabellaCamere(query);
					} catch (SQLException e1) {
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						e1.printStackTrace();
					}

				}// fine else
			}//fine else iniziale
		}// fine cerca

	}

	class MyActionListener implements ActionListener {
		CardLayout l;
		JPanel p;

		public MyActionListener(CardLayout l, JPanel p) {
			this.l = l;
			this.p = p;
		}

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == viewC) {
				l.last(p);
			} else if (e.getSource() == viewN) {
				l.first(p);
			} else if (e.getSource() == cercaCliente) {
				String query;
				boxCliente.setVisible(true);
				tutti.setVisible(true);
				presenti.setVisible(true);
				boxCamera.setVisible(false);
				nonSpecificato.setVisible(false);
				disponibile.setVisible(false);
				occupata.setVisible(false);
				String selezionato = "";
				if (boxCliente.getSelectedItem().equals("Nome"))
					selezionato = "nome";
				else if (boxCliente.getSelectedItem().equals("Cognome"))
					selezionato = "cognome";
				else if (boxCliente.getSelectedItem().equals(
						"Numero di Documento"))
					selezionato = "numerodidocumento";
				try {
					if (tutti.isSelected()) {
						query = "SELECT nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') FROM "
								+ username
								+ ".CLIENTI WHERE "
								+ selezionato
								+ " like '"
								+ cerca.getText()
								+ "%'";
						azzeraTabellaClienti();
						ricercaInTabellaClienti(query);
					} else if (presenti.isSelected()) {
						query = "select nome,cognome,DATE_FORMAT(datadinascita,'%d/%m/%Y'),numerodidocumento,DATE_FORMAT(datadiarrivo,'%d/%m/%Y') from "
								+ username
								+ ".clienti where "
								+ selezionato
								+ " like '"
								+ cerca.getText()
								+ "%' && presente=1";
						azzeraTabellaClienti();
						ricercaInTabellaClienti(query);
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
				l.first(p);
			} else if (e.getSource() == cercaCamera) {
				String query;
				boxCliente.setVisible(false);
				tutti.setVisible(false);
				presenti.setVisible(false);
				boxCamera.setVisible(true);
				nonSpecificato.setVisible(true);
				disponibile.setVisible(true);
				occupata.setVisible(true);
				String selezionato = "";
				if (boxCamera.getSelectedItem().equals("Numero"))
					selezionato = "numero";
				else if (boxCamera.getSelectedItem().equals("Numero Posti"))
					selezionato = "numeroposti";
				if (nonSpecificato.isSelected()) {
					query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere  WHERE "
							+ selezionato
							+ " like '" + cerca.getText() + "%'";
				} else if (disponibile.isSelected()) {
					query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere  WHERE "
							+ selezionato
							+ " like '"
							+ cerca.getText()
							+ "%' && stato='DISPONIBILE'";
				} else {
					query = "SELECT numero,numeroposti,matrimoniale,stato FROM "
							+ username
							+ ".camere  WHERE "
							+ selezionato
							+ " like '"
							+ cerca.getText()
							+ "%' && stato='OCCUPATA'";
				}
				try {
					azzeraTabellaCamere();
					ricercaInTabellaCamere(query);
				} catch (SQLException e1) {
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					e1.printStackTrace();
				}
				l.last(p);
			}

		}
	}// MyActionListener

	public void creaTabellaClienti(String query) throws SQLException,
			ClassNotFoundException {
		modelClienti = new MyDefaultTableModel();
		rs = database.querySelect(query);
		int columnCount = 5;
		;

		modelClienti.addColumn("Nome");
		modelClienti.addColumn("Cognome");
		modelClienti.addColumn("Data di nascita");
		modelClienti.addColumn("N.Documento");
		modelClienti.addColumn("Data di arrivo");
		Vector<String> row;
		while (rs.next()) {
			row = new Vector<String>(columnCount);
			for (int i = 1; i <= columnCount; i++) {
				row.add(rs.getString(i));
			}
			modelClienti.addRow(row);
		}
		tabellaClienti = new JTable(modelClienti);
		pannelloTabella1 = new JPanel(new BorderLayout());
	}// creaTabella

	public void creaTabellaCamere(String query) throws SQLException,
			ClassNotFoundException {
		modelCamere = new MyDefaultTableModel();
		rs = database.querySelect(query);
		int columnCount = 4;

		modelCamere.addColumn("N.Camera");
		modelCamere.addColumn("N.Posti Disponibili");
		modelCamere.addColumn("Matrimoniale");
		modelCamere.addColumn("Stato");

		Vector<String> row;
		while (rs.next()) {
			row = new Vector<String>(columnCount);
			for (int i = 1; i <= columnCount; i++) {
				if (i == 3) {
					if (rs.getBoolean(i)) {
						row.add("Si");
					} else
						row.add("No");
				} else
					row.add(rs.getString(i));
			}
			modelCamere.addRow(row);

		}
		tabellaCamere = new JTable(modelCamere);
		pannelloTabella2 = new JPanel(new BorderLayout());

	}

	public void visualizzaCamere(String query) throws ClassNotFoundException,
			SQLException {
		b = new ArrayList<JButton>();
		rs = database.querySelect(query);
		int k = 0, i = 0;
		while (rs.next()) {
			JButton j = new JButton(rs.getString(1));
			j.addActionListener(this);
			j.setActionCommand(rs.getString(1));
			b.add(j);
			b.get(i).setPreferredSize(new Dimension(70, 70));
			if (rs.getString(2).compareTo("DISPONIBILE") == 0)
				b.get(i).setBackground(Color.GREEN);
			else if (rs.getString(2).compareTo("OCCUPATA") == 0)
				b.get(i).setBackground(Color.RED);
			b.get(i).setOpaque(true);
			addg(b.get(i), i % 16, k);
			if (i % 16 == 15)
				k++;
			i++;
		}
	}

	public void ricercaInTabellaClienti(String query) throws SQLException,
			ClassNotFoundException {
		rs = database.querySelect(query);
		int columnCount = 5;
		Vector<String> row;
		while (rs.next()) {
			row = new Vector<String>(columnCount);
			for (int i = 1; i <= columnCount; i++) {
				row.add(rs.getString(i));
			}
			modelClienti.addRow(row);
		}
		tabellaClienti.setModel(modelClienti);
	}// ricercaTabellaClienti

	public void ricercaInTabellaCamere(String query) throws SQLException,
			ClassNotFoundException {
		rs = database.querySelect(query);
		int columnCount = 4;
		Vector<String> row;
		while (rs.next()) {
			row = new Vector<String>(columnCount);
			for (int i = 1; i <= columnCount; i++) {
				if (i == 3) {
					if (rs.getBoolean(i)) {
						row.add("Si");
					} else
						row.add("No");
				} else
					row.add(rs.getString(i));
			}
			modelCamere.addRow(row);
		}
		tabellaCamere.setModel(modelCamere);
	}// ricercaTabellaCamere

	public void azzeraTabellaClienti() throws SQLException {
		modelClienti.setRowCount(0);
	}// azzeraTabellaClienti

	public void azzeraTabellaCamere() throws SQLException {
		modelCamere.setRowCount(0);
	}// azzeraTabellaCamere

	public void addg(Component comp, int x, int y) {
		c.gridx = x;
		c.gridy = y;
		pannelloCamere.add(comp, c);
	}

	class MyDefaultTableModel extends DefaultTableModel {
		private static final long serialVersionUID = 1L;

		public boolean isCellEditable(int row, int column) {
			return false;
		}
	}

	public static void mergeSort(int[] v, int inf, int sup) {
		if (inf < sup) {
			int med = (inf + sup) / 2;
			mergeSort(v, inf, med);
			mergeSort(v, med + 1, sup);
			merge(v, inf, med, sup);
		}
	}

	private static void merge(int[] v, int inf, int med, int sup) {
		int[] aux = new int[sup - inf + 1];
		int i = inf, j = med + 1, k = 0;
		while (i <= med && j <= sup)
			if (v[i] > v[j]) {
				aux[k] = v[i];
				i++;
				k++;
			} else {
				aux[k] = v[j];
				j++;
				k++;
			}
		while (i <= med) {
			aux[k] = v[i];
			i++;
			k++;
		}
		while (j <= sup) {
			aux[k] = v[j];
			j++;
			k++;
		}
		for (k = 0; k < aux.length; k++)
			v[inf + k] = aux[k];
	}

	public void onTop() {
		this.setVisible(true);
	}

	public void aggiornaColoriCamera(String camera, Color col) {
		int i = 0;
		while (!b.get(i).getText().equals(camera)) {
			i++;
		}
		b.get(i).setBackground(col);
	}

	public String accessoNome(String username) {
		String nomef = "";
		rs = database
				.querySelect("select hotel from accesso.dati where username='"
						+ username + "'");
		if (rs.next()) {
			nomef = rs.getString(1);
		}
		return nomef;
	}

	public String accessoPassword(String username)
			throws ClassNotFoundException {
		String pass = "";
		rs = database
				.querySelect("select pass from accesso.dati where username='"
						+ username + "'");
		if (rs.next()) {
			pass = rs.getString(1);
		}
		return pass;
	}

}
